package a

import (
	"fmt"
	"log/slog"
	"syscall"
)

func R(p *syscall.LazyProc, args ...uintptr) (r1, r2 uintptr, e syscall.Errno) {
	r1, r2, e = syscall.SyscallN(p.Addr(), args...)
	if e != 0 {
		slog.Debug(fmt.Sprintf("Call %s error(%d)", p.Name, e), "error", e.Error())
	}
	return
}

// 使用 syscall.SyscallN 调用 p，返回第一个返回值
func R1(p *syscall.LazyProc, args ...uintptr) uintptr {
	r, _, _ := R(p, args...)
	return r
}

// 使用 syscall.SyscallN 调用 p，返回第一个返回值和错误
func R1E(p *syscall.LazyProc, args ...uintptr) (uintptr, error) {
	r, _, e := R(p, args...)
	return r, e
}

// 使用 syscall.SyscallN 调用 p，返回第一个返回值
func R1B(p *syscall.LazyProc, args ...uintptr) bool {
	return ToBool(R1(p, args...))
}
